﻿
#include "ChaosLogFile.hpp"

#include <fstream>

namespace Chaos
{

	ChsLogFile::ChsLogFile(wstring fileName)
	{
		//默认的两个日志文件
		m_strLogFileName = fileName;		//工作日志文件名

		//检测和初始化日志和出错信息文件
		InitLogFiles();
		
	}

	ChsLogFile::~ChsLogFile()
	{
		wfstream outFileStream;
		outFileStream.open(m_strFileFullName.c_str(),wfstream::app|wfstream::out);
		outFileStream.imbue(m_loc);
		outFileStream << m_strLogCache.c_str();
		outFileStream.flush();
		outFileStream.close();
		m_strLogCache.clear();

	}

	void ChsLogFile::InitLogFiles()
	{
		TCHAR buf[100];
		/*得到当前工作目录，这个工作本来应该有资源管理
		部分负责，但是由于ChaosLogManager是整个系统最先生成
		的，所以这儿特别处理。
		*/
		GetCurrentDirectory(100,buf);
		m_strLogDir = buf;
		//logDir.append(buf);
		//设置默认日志目录
		m_strLogDir += _T("\\Log\\");

		TCHAR filepart[100];
		//检测目标日志文件是否存在，如果不存在则新建文件。
		if(!SearchPath(m_strLogDir.c_str(),m_strLogFileName.c_str(),NULL,100,buf,(LPTSTR *)&filepart))
		{
			
			//如果目录不存在，则是第一次启动，于是生成“Logs”目录
			if(!CreateDirectory(m_strLogDir.c_str(),NULL))
			{
				if(GetLastError()!=ERROR_ALREADY_EXISTS)
				{
					//如果生成“Logs”目录失败，则当前目录作为日志输出目录
					m_strLogDir=_T("");
				}
			}

			m_strFileFullName = m_strLogDir;
			m_strFileFullName += m_strLogFileName;

			wfstream logFileStream;
			//生成并打开日志文件
			logFileStream.open(m_strFileFullName.c_str(),fstream::out);
			//输入标题，每次系统第一次启动的时候输出
			logFileStream << _T("/**************************************") << endl;
			logFileStream << _T("*	Chaos ChaosEngine Runtime ") <<  m_strLogFileName.c_str() << endl;
			logFileStream << _T("***************************************/") << endl;
			logFileStream.flush();
			logFileStream.close();
		}
	}

	
	#include <fstream>

	void ChsLogFile::Update()
	{
		wfstream outFileStream;
		if(m_strLogCache.size() > 100)
		{
			outFileStream.open(m_strFileFullName.c_str(),wfstream::app|wfstream::out);
			
			outFileStream.imbue(m_loc);
			outFileStream << m_strLogCache.c_str();
			outFileStream.flush();
			outFileStream.close();

			m_strLogCache.clear();
		}
	}

}//namespace Chaos
